package com.rzjm.api.netty.charger;

import cn.hutool.json.JSONObject;
import com.rzjm.api.util.DateUtil;
import com.rzjm.api.util.StringUtil;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;

/**
 * @创建者：zhouwei
 * @创建时间：2021/5/24
 * @描述：
 */
@Data
public class MessageModel implements Serializable {

    private String header;

    private String order;

    /**
     *  智能电表的 数据版本
     *  0034 代 表 三 相 直 通 多 费 率
     *  0035 代 表 三 相 互 感 表 多 费 率
     *  0011 代 表 单 相 多 费 率
     *  0037 代 表 三 相 互 感 单 费 率
     *  0036 代 表 三 相 直 通 单 费 率
     *  0010 代 表 单 相 单 费 率
     */
    private String dataVersion;

    /**
     *  电表模式
     *  多 费 率 00、 单 费 率 01、 后 付 费 02
     */
    private String meterModel;

    /**
     *  数据库里正常顺序的编号
     */
    private String clientNum;

    /**
     * 倒序的
     */
    private String clientAddress;

    private String data;

    private String footer;

    private String msgData;

    /**  消息类型  0 - 充电设备  1 - 电表数据    */
    private Integer msgType;

    /**
     * C R C 校 验 码
     */
    private String crc;

    /**
     *  内部流量卡号  ccid  20字节
     */
    private String ccid;

    /**
     *  4g模组号  imei号  15字节
     */
    private String imei;

    /**
     *  CSQ信号值 1字节
     */
    private String csq;

    private JSONObject jsonData;

    public MessageModel(String msg){
        System.out.println("接收到消息：" + msg +  "       " + DateUtil.getTime());
        splitMsg(msg);
    }

    //MS01202201101,23552,774,00000001655773091838,9630|1,23552,774,00000001655773091838,9630
    // |1,23552,774,00000001655773091838,9630|1,23552,774,00000001655773091838,9630
    // |1,23552,774,00000001655773091838,9630|1,23552,774,00000001655773091838,9630
    // |1,23552,774,00000001655773091838,9630|1,23552,774,00000001655773091838,9630
    // |1,23552,774,00000001655773091838,9630|1,23552,774,00000001655773091838,9630,ME
    private void splitMsg(String msg){
        this.msgData = msg.toUpperCase();
        if(StringUtils.isNotBlank(msg)){
            if(msg.contains("MS")){
                this.msgType = 0;
                this.header = msg.substring(0, 2);
                this.order = msg.substring(2, 4);
                this.clientNum = msg.substring(4,12);

                int indexME = msg.lastIndexOf("ME");
                this.data = msg.substring(12,indexME);
                this.footer = msg.substring(indexME,indexME + 2);
            }
        }
    }
}
